package com.syf.starter.core.netty.tool.spi;

import java.math.BigDecimal;
import java.util.concurrent.TimeUnit;

public interface SyfServerInvokerShape {

    /**
     * 设置速率
     *
     * @param MAX_SERVICE_THREAD_NUM service的线程池最大数
     * @param AVG_RESPONSE_SECONDS   service的平均响应时间秒数
     */
    default BigDecimal setRate(Integer MAX_SERVICE_THREAD_NUM, Float AVG_RESPONSE_SECONDS) {
        return new BigDecimal(MAX_SERVICE_THREAD_NUM)
                .divide(new BigDecimal(AVG_RESPONSE_SECONDS), 1, BigDecimal.ROUND_DOWN);
    }

    /**
     * 获取授权
     *
     * @return true：在规定时间内获取授权，false：在规定时间内不能获取授权
     */
    boolean tryAcquire(long timeout, TimeUnit unit);

    /**
     * 阻塞式获取授权
     */
    void acquire();

    void shutdown();
}
